Auto Harmonic Pattern - Backtester [Trendoscope]We are finally here with the implementation of backtesting tool for Auto-Harmonic-Pattern-UltimateX .
CAUTION: THIS IS NOT A STRATEGY AND SHOULD NOT BE FOLLOWED BLINDLY. WE ENCOURAGE USERS TO UTILISE THIS AS BACKTESTING TOOL FOR BUILDING THEIR STRATEGY BASED ON HARMONIC PATTERNS
This script is based on our premium indicator - Auto-Harmonic-Pattern-UltimateX . In this script, along with implementation of scanning harmonic patterns, we provide various options via settings which enables users to build their own strategy based on harmonic patterns, use them with custom coded filters, backtest them on various tickers and timeframes.
Harmonic Patterns is concept and we can trade harmonic pattern in many ways. While general interest around harmonic patterns is to find reversal zones and use them for short term swing trades. But, using it along trend following strategies can also be very rewarding. Here is one of the educational idea I shared about using harmonic patterns for trend following. These are just few possibilities where users can explore further on how they want to trade this. The settings of this script are crafted in such a way that it enables users to explore all these possibilities.
🎲 Components
Chart components of this script is lighter compared to Auto Harmonic Pattern - UltimateX. This is because we want to keep lighter interface in order to support seamless execution of emulator. Since pine strategy framework does most of the things such as calculating profitability, keeping track of trades and results etc, display with respect to - "Closed Trade Stats" are removed from this script and "Open Trade Stats" are made lighter.
🎲 Settings
🎯 Trade Settings : Few important settings under this section are
Due to pine limitations, we will not be able to support both long and short in a same setup. Hence, users need to chose either long or short trade setup.
Entry/Base/Target play important role in defining your strategy.
Confluence is another important factor which lets users use multiple patterns at once as confirmation.
🎯 Zigzag Settings : Zigzag settings determine the size of patterns being formed.
Please note that smaller patterns may not yield very good results and larger patterns may take time to complete trade. Similarly higher depth can cause runtime issues. Recursive zigzag option is alternative to deep search algorithm.
🎯 Filters :
Filters enable users to select trades based on specific conditions. Ability to use external filter even allows writing and using custom filters to be used with this algorithm. Here is a video which explains how this can be done. HOW-TO-Use-external-filters
Pattern filters allow users to pick and chose patterns they want to trade. This can be done either individually or based on category
🎯 Alerts :
Apart from strategy specific alerts, the script also implements customisable alerts via pine alert() function. Alerts can be configured to send upon three conditions
When new pattern is created
When an existing pattern updates entry/stop/target due to safe repaint of D (Only happens when Trail Entry Price is selected)
When a pattern in trade closes either due to hitting stop or target
Important Note: Alerts fired via this method may not match the trades shown on chart as trades which are controlled via pine strategy emulator depends on various other factors such as pyramiding.
Alert template is customisable and users can make use of available placeholders to get dynamic data in alerts. Valid placeholders are
{alertType} - Alert type - New/Update/Close
{id} - Pattern Id
{ticker} - Ticker
{timeframe} - Chart timeframe
{price} - Current price
{patterns} - Identified pattern names
{direction} - Direction - Long/Short
{entry} - Entry Price
{stop} - Stop Price
{target} - Target Price
{orderType} - Limit/Stop - applicable for only New and Update types
{status} - Trade status. Valid values are Pending/Cancelled/Stopped/Success
Template is common for all custom alert types. Hence, updating the template will impact all custom alerts - New/Update/Close
{
"alert" : "{alertType}",
"id" : {id},
"ticker" : "{ticker}",
"timeframe" : "{timeframe}",
"price" : {price},
"patterns" : "{patterns}",
"direction" : "{direction}",
"entry" : {entry},
"stop" : {stop},
"target" : {target},
"orderType" : {orderType}
"status" : {status}
}
Here is a video on how to customise the alerts using templates and placeholders - HOW-TO-Customize-Alerts-With-Placeholders
🎯 Miscellaneous :
These are simple settings to control display and backtest bars. If you are running alerts, we suggest turning of Open Trades and Drawings and limit backtest to minimal value in order to improve efficiency of
🎯 Backtest Engine Parameters :
Default settings are optimised for trend following. Users are encouraged to play around with settings and filters to build strategy out of this tool.
Position sizing is not leveraged. Margin settings makes sure that trades cannot exceed capital.
All measures are taken to avoid repainting. Script does not use request.security and real time bars. This drastically reduces the risk of repainting in scripts.
If you are premium user, please select "Bar Magnifier".
Wyszukaj w skryptach "the script"
Strategy BackTest Display Statistics - TraderHalaiThis script was born out of my quest to be able to display strategy back test statistics on charts to allow for easier backtesting on devices that do not natively support backtest engine (such as mobile phones, when I am backtesting from away from my computer). There are already a few good ones on TradingView, but most / many are too complicated for my needs.
Found an excellent display backtest engine by 'The Art of Trading'. This script is a snippet of his hard work, with some very minor tweaks and changes. Much respect to the original author.
Full credit to the original author of this script. It can be found here: www.tradingview.com
I decided to modify the script by simplifying it down and make it easier to integrate into existing strategies, using simple copy and paste, by relying on existing tradingview strategy backtester inputs. I have also added 3 additional performance metrics:
- Max Run Up
- Average Win per trade
- Average Loss per trade
As this is a work in progress, I will look to add in more performance metrics in future, as I further develop this script.
Feel free to use this display panel in your scripts and strategies.
Thanks and enjoy :)
MZ HTF HFT ROCit Bot - Non Repainting Scalper v1.2 ADX RSI MOM This is a new iteration based on my Momentum trading bot.
This is an original script meant to be a high frequency trader that works on higher time frame calculations.
I came up with the idea that using calculus I can figure out the actual rate of change and momentum with different calculations than the momentum indicator that is provided by trading view. Once momentum is shifted on a small time frame, it will provide an entry signal. The script is meant to be used on an algorithmic trading system for scalping purposes. It should be run on a one minute time frame. Unfortunately due to various plotting constraints in Pinescript, you cannot plot the rate of change and momentum and price in the same pane. To counter this, I have a showdata toggle to give you values of the indicators at each entry.
This version has two main entry settings toggled with a checkbox. There is the ROC (rate of change) version and the MOM (momentum) entry signals.
The rate of change version is meant to take a look at your moving average and try to trigger when it hits a certain rate of change point. This can be helpful if you rather play it safer. I have noticed that you can get slightly better entry points but also does not give you as many entries. The momentum algorithm will give you faster entry points and might work best with a slight offset (use your back test to help you figure it out).
I have started to add tooltips to help you along. If you have suggestions please let me know.
How does it work?
Let's just assume that you are looking at a one minute chart. I recommend using the one minute for bots because it will give you the fastest execution for entries. Pinescript has an issue where the signal is not usually sent until the end of the bar/beginning of next bar. If the signal was triggered at the beginning of a 15 minute bar, it might not actually send the signal until the following 15 minute bar. If you are trading on small time frames, this can make all the difference. If you are using an algo platform that trailing stops, stop losse, take profits, etc. I would recommend you use that platform to close your trade. The close trade message will work, but pinescript does not know the exact entry price you received, so if you are trying to collect small profits, it is best that intermediary platform does that calculation for you. If you are dealing with larger moves, instead of small 1-3% scalps, you are probably fine to use the close message setting from pinescript.
Ok, so to take an example. I like to use the 3L and 3S tokens on Kucoin. This gives you a lot of volatility to work with compared to other tokens and coins. However, it can also meas that you are likely taking a higher risk. However, there are some things that can help with that (more on that later).
So we have a token we want to run, and have it on the 1m chart.
First, be sure that all of your filters are OFF when you start playing with the back test. This allows you to see how to best optimize the bot.
Use the show data to show you additional data when you are backtesting. This can allow you to try to filter out results or market conditions that do not work. I typically work with the RSI and use the 30 minute and 15 minute RSIs. I make sure that it is trading within a certain band - about 40-75. You can try the inverse and only buy during really low RSI's as well.
www.dropbox.com
Find the source of your data with the variant drop down. You can use any time frame, open, close. high, low, olc4. Open is pretty much guaranteed to not have any repainting issues - although all the other calcs use a custom isbarconfirmed security repaint calculation. I have been finding that Open and SMA work well, but feel free to explore. If you use a source like open, close, high, low, etc - the interval will not change anything further. If you use a variant such as an sma, you should try to find an interval that works well for that token. For instance, try an sma of 8-11 minutes and see which gives you the best backtest result without changing anything else. Offset ALMA/LSMA parameters are only used for those specific variants. These specific parameters will also affect the ALMA and LSMA if you use that variant in the trend filter. In other words, you can skip these if you are not using those types of moving averages.
www.dropbox.com
Configure the ROC and MOM intervals. If you are using a source such as open, close, etc- this is where you set the interval for your change. So consider using OHLC4 or a interval of 5 thru 15 and see what works best. The Momentum inverval usually works best in the 2-5 bars. There is a custom calculation I added in to try to filter out false entries as momentum is waning. This calculation works best in 2-5 bar interval.
Configure the trigger point and offset. If you are using rate of change, the best settings will likely be between -1 to 0.5. If you are using momentum, you will likely want -20 to 10. This is where you will notice the entries will shift a bit. Try to find a balance between your backtest settings and actually finding what you thin will be the best entries based on a slight delay from trading view, to algo, to your trading platform. This can likely be a minute (maybe even) or so- so be sure to not get too caught up between the backtest results and be sure to finesse the entries to actually fit nicely - maybe a bar earlier than you would likely think. If your entries are coming in too early, you can use the offset to delay your entry by a few bars. This is both science and an art form- don't get too caught up on the back test results as that is based on having all the data tha already transpired, it's not based on how it will actually perform during deployment.
Take profit and stop loss. This should be self explanatory. This script can toggle between static take profit and a trailing profit. For scalping, you will likely want to limit it below 2% to get a good win ratio. Stop loss should be at least 5-6% for these types of 3L/3S tokens to give the strategy some room to move (if the token goes down 2% before it shoots back up, the price will go down 6%). This does not yield the best R/R ratio from a traditional trader perspective, but the statistical probabilities are in your favor for these events will happen. If you have better ideas for how to set this all up, feel free to contribute your ideas in the comments as we can all learn from each other. You can definitely set a much tighter stop loss with a larger take profit to get a lower win rate but in turn might get much better returns. It's all up to you.
FILTERS www.dropbox.com
These filters require you to know a bit about each indicator and how you want to use them. I will only go over the general idea.
Variant Filter - this is especially useful if you want to trade above a moving average. Say for instance you only want to take trades when we are over the 100 Day moving average. Or above a 30 minute, 30 bar EMA, etc. Although originally ported over from my other scripts, this is not a filter that I use often in conjunction with this script.
RSI - perhaps you want to buy when we are below the 30 line on the 30 minute RSI, or we want only want to have the strategy work when we are above the 50 RSI, this can all be configured here. I typically like to try a few different rationales here.
Now with brand NEW ADX filter - this is a brand new idea that seems to work rather well. Based on your ADX settings you can also turn on the "only uptrend" which will try to calculate if you are in an uptrend based on your ADX config. Please keep in mind that uptrend is based relatively on the ADX settings.
- There is a sprinkle of RSI magic in the entry signal to make sure that rsi is not declining in the calculation, so this can affect how many entries you get.
Some other tips:
Forward test.
Set up your algo bot on a one minute interval.
Set up take profit and stop loss on your algo trading platform.
Don't use the exact settings as your backtest, maybe try a slightly more conservative approach from the algo trading platform to make sure you are within range of triggering your events with a slight delay from signal to execution. If you have a 1.6% take profit, perhaps try 1.5% on your platform first.
By using these scripts you agree that you are trading at your own risk. I make no guarantees of returns or results. I just provide tools to help you trade better. However, I hope this ROCit will take you to the moon. And if it does, be sure to give me a shout as well as some tips of your own.
Send me a message with any questions or suggestions.
Dynamic Fib StrategyAfter publishing many complex scripts with a myriad of inputs that were confusing for the average user, and after being told my previous publications were overfitted and not easily applied across the board...I spent the past three months working on this masterpiece.
The script is very simple to use, and it MUST be used for timeframes of 10 minutes or more. Please do not use this strategy for lower timeframes thinking that more trades is a desireable trait in a strategy. Patience is a virtue, and it doesn't matter if there are 1000 bars between trades (I am exaggerating here) all crypto is cyclical in a short timeframe of days.
The script is based on moving averages, what is different about this script is that it is the result of months of analysis of the crosses that are key indicators of the best times to trade. It also identifies crosses that indicate when a massive dump is coming and when the dump turns back into a pump. It is designed to be a long strategy with the careful identification of the dump indicators so it preserves your capital and results in a better trade approach.
At the heart of this script is the Sutte MA and the SMA, and only a subset of the settings for these are exposed for user input to keep things simple.
The second key piece of how this script works is the Fibonnaci levels. For the purposes of using this script, the first two levels (Fib 1 and Fib 2) are only for display purposes of the bands and does not affect the triggers for trading. It is only the third and fourth levels which impact the trade triggerers for buying and selling. The idea here is that the best times to execute a trade is when the price moves into the outer bands as these are typical triggers for selloffs from those suffering from FOMO.
Since I have done quite a bit of work here, I do not wish for this script to be copied and pasted into other scripts. It is my coup de grace and there is not a script like this anywhere on TradingView that delves deep into the crosses that matter.
logLibrary "log"
Logging library for easily displaying debug, info, warn, error and critical messages.
No real need to explain why you might want to use this library! I'm sure you've all experienced the frustration of trying to understand the data state of your scripts... so, enjoy! More on it's way...
(Don't forget to check the helpers in the script and the useful tips below)
Some Useful Tips
By default the log console persists between bars (for history) and bars and ticks (for realtime).
Sometimes it is useful to clear the log after each candle or tick (assuming we are using the above helpers):
```
log_print(clear = true) // starts afresh on every bar and tick (excludes historical bars but good realtime tick analysis)
log_print(clear = barstate.isnew) // clears the log at the start of each bar (again, excludes historical but good realtime candle analysis)
```
It is also useful to be able to selectively understand the state of data at specific points or times within a script:
```
if log.once()
debug('useful variable', my_var) // this log only gets written once, upon first execution of this statement
if log.only(5)
debug3(a, b, c) // these variables are only logged the first five times this statement is executed
log_print(clear = false) // clear must be false and you should not write other logs on every bar, or the above will be lost
```
Final tip. If you want to view ONLY log entries of a particular level, then negate the constant:
```
log_print(level = -LOG_DEBUG)
```
Detailed Interface
once() Restrict execution to only happen once. Usage: if assert.once()\n happens_once()
Returns: bool, true on first execution within scope, false subsequently
only(repeat) Restrict execution to happen a set number of times. Usage: if assert.only(5)\n happens_five_times()
Parameters:
repeat : int, the number of times to return true
Returns: bool, true for the set number of times within scope, false subsequently
init() Initialises the log array
Returns: string , tuple based array to contain all pending log entries (__LOG)
clear(msgs) Clears the log array
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
trace(msgs, msg) Writes a trace message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the trace message to write to the log
debug(msgs, msg) Writes a debug message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the debug message to write to the log
info(msgs, msg) Writes an info message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the info message to write to the log
warn(msgs, msg) Writes a warning message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the warn message to write to the log
error(msgs, msg) Writes an error message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the error message to write to the log
fatal(msgs, msg) Writes a critical message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the fatal message to write to the log
log(msgs, level, msg) Write a log message to the log console with a custom level
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
level : ing, the logging level to assign to the message
msg : string, the log message to write to the log
severity(msgs) Checks the unprocessed log messages and returns the highest present level
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
Returns: int, the highest level found within the unfiltered logs
print(msgs, level, clear, rows, text_size, position) Prints all log messages to the screen
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
level : int, the minimum required log level of each message to be displayed
clear : bool, clear the printed log console after each render (useful with realtime when set to barstate.isconfirmed)
rows : int, the number of rows to display in the log console
text_size : string, the text size of the log console (global size vars)
position : string, the position of the log console (global position vars)
unittest_log(case) Log module unit tests, for inclusion in parent script test suite. Usage: log.unittest_log(__ASSERTS)
Parameters:
case : string , the current test case and array of previous unit tests (__ASSERTS)
unittest(verbose) Run the log module unit tests as a stand alone. Usage: log.unittest()
Parameters:
verbose : bool, optionally disable the full report to only display failures
assertLibrary "assert"
Production ready assertions and auto-reporting for unit testing pine scripts.
This library was born from the need to maintain production level stability and catch regressions / bugs early and fast. I hope this help you trust your pine scripts too. More libraries and tools on their way... please follow for more.
Please see the script for helpers to copy into your own scripts as well as examples at the bottom of the library unit testing itself.
Quick Reference
```
case = assert.init()
new_case(case, 'Asserts for floats and ints')
assert.equal(a, b, case, 'a == b')
assert.not_equal(a, b, case, 'a != b')
assert.nan(a, case, 'a == na')
assert.not_nan(a, case, 'a != na')
assert.is_in(a, b, case, 'a in b ')
assert.is_not_in(a, b, case, 'a not in b ')
assert.array_equal(a, b, case, 'a == b ')
new_case(case, 'Asserts for ints only')
assert.int_in(a, b, case, 'a in b ')
assert.int_not_in(a, b, case, 'a not in b ')
assert.int_array_equal(a, b, case, 'a == b ')
new_case(case, 'Asserts for bools only')
assert.is_true(a, case, 'a == true')
assert.is_false(a, case, 'a == false')
assert.bool_equal(a, b, case, 'a == b')
assert.bool_not_equal(a, b, case, 'a != b')
assert.bool_nan(a, case, 'a == na')
assert.bool_not_nan(a, case, 'a != na')
assert.bool_array_equal(a, b, case, 'a == b ')
new_case(case, 'Asserts for strings only')
assert.str_equal(a, b, case, 'a == b')
assert.str_not_equal(a, b, case, 'a != b')
assert.str_nan(a, case, 'a == na')
assert.str_not_nan(a, case, 'a != na')
assert.str_in(a, b, case, 'a in b ')
assert.str_not_in(a, b, case, 'a not in b ')
assert.str_array_equal(a, b, case, 'a == b ')
assert.report(case)
```
Detailed Interface
once() Restrict execution to only happen once. Usage: if assert.once()\n happens_once()
Returns: bool, true on first execution within scope, false subsequently
init() Initialises the asserts array
Returns: string , tuple based array containing all unit test results and current case details (__ASSERTS)
equal(a, b, case, name) Numeric assert equal. Usage: assert.equal(1, 1, case, 'one == one')
Parameters:
a : float, numeric value "a" to compare equal to "b"
b : float, numeric value "b" to compare equal to "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
not_equal(a, b, case, name) Numeric assert not equal. Usage: assert.not_equal(1, 2, case, 'one != two')
Parameters:
a : float, numeric value "a" to compare not equal "b"
b : float, numeric value "b" to compare not equal "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
nan(a, case, name) Numeric assert is NaN. Usage: assert.nan(float(na), case, 'number is NaN')
Parameters:
a : float, numeric value "a" to check is NaN
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
not_nan(a, case, name) Numeric assert is not NaN. Usage: assert.not_nan(1, case, 'number is not NaN')
Parameters:
a : float, numeric value "a" to check is not NaN
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
is_in(a, b, case, name) Numeric assert value in float array. Usage: assert.is_in(1, array.from(1.0), case, '1 is in ')
Parameters:
a : float, numeric value "a" to check is in array "b"
b : float , array "b" to check contains "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
is_not_in(a, b, case, name) Numeric assert value not in float array. Usage: assert.is_not_in(2, array.from(1.0), case, '2 is not in ')
Parameters:
a : float, numeric value "a" to check is not in array "b"
b : float , array "b" to check does not contain "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
array_equal(a, b, case, name) Float assert arrays are equal. Usage: assert.array_equal(array.from(1.0), array.from(1.0), case, ' == ')
Parameters:
a : float , array "a" to check is identical to array "b"
b : float , array "b" to check is identical to array "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
int_in(a, b, case, name) Integer assert value in integer array. Usage: assert.int_in(1, array.from(1), case, '1 is in ')
Parameters:
a : int, value "a" to check is in array "b"
b : int , array "b" to check contains "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
int_not_in(a, b, case, name) Integer assert value not in integer array. Usage: assert.int_not_in(2, array.from(1), case, '2 is not in ')
Parameters:
a : int, value "a" to check is not in array "b"
b : int , array "b" to check does not contain "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
int_array_equal(a, b, case, name) Integer assert arrays are equal. Usage: assert.int_array_equal(array.from(1), array.from(1), case, ' == ')
Parameters:
a : int , array "a" to check is identical to array "b"
b : int , array "b" to check is identical to array "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
is_true(a, case, name) Boolean assert is true. Usage: assert.is_true(true, case, 'is true')
Parameters:
a : bool, value "a" to check is true
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
is_false(a, case, name) Boolean assert is false. Usage: assert.is_false(false, case, 'is false')
Parameters:
a : bool, value "a" to check is false
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
bool_equal(a, b, case, name) Boolean assert equal. Usage: assert.bool_equal(true, true, case, 'true == true')
Parameters:
a : bool, value "a" to compare equal to "b"
b : bool, value "b" to compare equal to "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
bool_not_equal(a, b, case, name) Boolean assert not equal. Usage: assert.bool_not_equal(true, false, case, 'true != false')
Parameters:
a : bool, value "a" to compare not equal "b"
b : bool, value "b" to compare not equal "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
bool_nan(a, case, name) Boolean assert is NaN. Usage: assert.bool_nan(bool(na), case, 'bool is NaN')
Parameters:
a : bool, value "a" to check is NaN
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
bool_not_nan(a, case, name) Boolean assert is not NaN. Usage: assert.bool_not_nan(true, case, 'bool is not NaN')
Parameters:
a : bool, value "a" to check is not NaN
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
bool_array_equal(a, b, case, name) Boolean assert arrays are equal. Usage: assert.bool_array_equal(array.from(true), array.from(true), case, ' == ')
Parameters:
a : bool , array "a" to check is identical to array "b"
b : bool , array "b" to check is identical to array "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
str_equal(a, b, case, name) String assert equal. Usage: assert.str_equal('hi', 'hi', case, '"hi" == "hi"')
Parameters:
a : string, value "a" to compare equal to "b"
b : string, value "b" to compare equal to "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
str_not_equal(a, b, case, name) String assert not equal. Usage: assert.str_not_equal('hi', 'bye', case, '"hi" != "bye"')
Parameters:
a : string, value "a" to compare not equal "b"
b : string, value "b" to compare not equal "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
str_nan(a, case, name) String assert is NaN. Usage: assert.str_nan(string(na), case, 'string is NaN')
Parameters:
a : string, value "a" to check is NaN
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
str_not_nan(a, case, name) String assert is not NaN. Usage: assert.str_not_nan('hi', case', 'string is not NaN')
Parameters:
a : string, value "a" to check is not NaN
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
str_in(a, b, case, name) String assert value in string array. Usage: assert.str_in('hi', array.from('hi'), case, '"hi" in ')
Parameters:
a : string, value "a" to check is in array "b"
b : string , array "b" to check contains "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
str_not_in(a, b, case, name) String assert value not in string array. Usage: assert.str_in('hi', array.from('bye'), case, '"hi" in ')
Parameters:
a : string, value "a" to check is not in array "b"
b : string , array "b" to check does not contain "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
str_array_equal(a, b, case, name) String assert arrays are equal. Usage: assert.str_array_equal(array.from('hi'), array.from('hi'), case, ' == ')
Parameters:
a : string , array "a" to check is identical to array "b"
b : string , array "b" to check is identical to array "a"
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the current unit test name, if undefined the test index of the current case is used
Returns: bool, true if the assertion passes, false otherwise
new_case(case, name) Assign a new test case name, for the next set of unit tests. Usage: assert.new_case(case, 'My tests')
Parameters:
case : string , the current test case and array of previous unit tests (__ASSERTS)
name : string, the case name for the next suite of tests
clear(case) Clear all stored unit tests from all cases. Usage: assert.clear(case)
Parameters:
case : string , the current test case and array of previous unit tests (__ASSERTS)
revert(case) Revert the previous unit test. Usage: = assert.revert(case)
Parameters:
case : string , the current test case and array of previous unit tests (__ASSERTS)
Returns: , tuple containing the msg and result of the reverted test
passed(case, revert) Check if the last unit test has passed. Usage: bool success = assert.passed(case)
Parameters:
case : string , the current test case and array of previous unit tests (__ASSERTS)
revert : bool, optionally revert the test
Returns: bool, true only if the test passed
failed(case, revert) Check if the last unit test has failed. Usage: bool failure = assert.failed(case)
Parameters:
case : string , the current test case and array of previous unit tests (__ASSERTS)
revert : bool, optionally revert the test
Returns: bool, true only if the test failed
report(case, verbose) Report the outcome of unit tests that fail. Usage: bool passed = assert.report(case)
Parameters:
case : string , the current test case and array of previous unit tests (__ASSERTS)
verbose : bool, optionally display full report that includes the outcome of all tests
Returns: bool, true only if all tests passed
unittest_assert(case) Assert module unit tests, for inclusion in parent script test suite. Usage: assert.unittest_assert(__ASSERTS)
Parameters:
case : string , the current test case and array of previous unit tests (__ASSERTS)
unittest(verbose) Run the assert module unit tests as a stand alone. Usage: assert.unittest()
Parameters:
verbose : bool, optionally toggle report to display the outcome of all unit tests
PriceCatch Breakout Signals IOHi TradingView Community.
Here is a script that identifies and marks two different breakout levels on the chart. It works on all instruments - equities, forex, crypto & commodities.
Probable Breakout Buy Level
Stop-Reverse Buy Level
The above chart is self-explanatory. The script uses two different formulas to look out for breakouts. This logic opens up more opportunities.
As the levels are marked in advance before the breakouts occur, it will give traders ample time to study further and plan the trade.
PLAYING SAFE
After taking the trade, to play safe, I follow this method that once the Low of the price goes above the Breakout Level, I usually shift the stop loss to buy price to protect against any sudden reversal. For me protecting capital is important. As usual with price action, longer time-frames produce more reliable signals.
STOP LOSS
While the initial stop level is suggested, traders may also use the ATR to set stop loss. Users may find my free script 'ATR value on Chart' useful.
NOTE - PRIOR TO USING THIS SCRIPT:
You may use this script in addition to your other indicators or independently. Please remember that the script is shared with absolutely no assurances and warranties whatsoever regarding usability and as a responsible trader, please satisfy yourselves thoroughly and use it only if you are convinced it works for you. Remember, you are 100% responsible for your actions. If you understand and accept that, you may use the script. The script does not identify any short signals.
QUERIES/FEEDBACK
Please PM me.
Regards to all and wish everyone all the best with trading.
The Moon█ OVERVIEW
The Moon is a script that is designed to help Traders analyse their charts using the moon. This script consists of three main features :
1. Moon Phases Pro : This is a more powerful version of the default built-in Moon Phases where it would plot both past cycles and Future cycles with a better accuracy.
2. Moon Lines : This plots the moon's longitude into price. you can also select your desired $/degree ( price vs time unit) to make these lines better suited for your chart and the asset your playing with. We also didn't forget to add an option to enable harmonics of these lines. In addition, you can select "reverse" to get the downtrending plants as well.
3. Moon Angles : This allows you to highlight areas where the moon is at X degree. you can get the Moon at zero aris or 180 degrees or any other degree!.
We also added some styling options to help with the visuals.
█ Future Plans and upgrades to this script may include :
1. Enhanced algorithm for a faster loading/processing script.
2. More future dates plotting.
And more! Feel free to contact me with any feature that you would like to see in this script
█ How to use :
1. Open the settings.
2. Enable your desired tool and adjust the settings.
Give the script a few seconds and you should be set. Don't enable more than 2 tools at the same time, but if you want to do that, you can insert the same script twice or more in your chart.
This script is coded as an addon to the Gann ToolBox package/scripts.
Planetary Aspects & Transits█ OVERVIEW
Planetary Aspects and Transits are commonly used by Astrology Traders and Gann Traders for various reasons. This script is designed to highlight these planetary aspects and transitions on your chart. You can select your favorite planet -including the sun and the moon- and also select the aspect that you would like to view and this script will highlight it on the chart. The aspects that are included to choose from are ( 0, 30, 45, 60, 72, 90, 120, 135, 144, 150, and 180 degrees ). You can also select the mode of these aspects and transits ( Heliocentric vs Geocentric ).
This script offers two running options :
1. Planet vs aspect : using this option you will be able to select a planet and an aspect and we will find/highlight all the transitions vs all the planets in that aspect.
2. Planet vs Planet : using this option you will be able to select two planet and a single aspect to view on the chart.
█ Future Plans and upgrades to this script may include :
1. Enhanced algorithm for a faster loading/processing script.
2. More future dates plotting.
And more! Feel free to contact me with any feature that you would like to see in this script
█ How to use :
1. Open the settings.
2. Choose the planet/planets, and the aspect.
3. Enable the option.
Give the script a few seconds and you should be set.
This script is coded as an addon to the Gann ToolBox package/scripts.
Barholle eMA and RSI Movement TestThis is a test that offers insight into whether and asset is heading into bullish or bearish territory.
This indicator/test offers insight into the Exponential Moving Average's velocity and acceleration as well as the Stochastic RSI's velocity, acceleration and jerk. Included is a 'Stochastic Difference' and 'Stochastic Growth' indicators (commented out) that measure the difference between K and D in the Stoch RSI as well as the rate of it's change. This test is all about crossovers - the best leading indicator is a downward cross of the eMA velocity over the eMA acceleration, indicating a drop in price in the current or next bar.
The lines or importance have been set to -2 and 5, but these should be adjusted to suit your preferences. These numbers were chosen in order to try and create some kind of threshold after which action might be suggested. Backtesting is highly recommended so you can see how the test does and does not work. It is super powerful, but it is not omniscient - its an RSI and eMA derivative, past success does not necessarily dictate future success.
Please look at the code for several more plots you can use of derivatives and other ideas explore but commented out for greater legibility of the graph. Commenting and commenting (or uncommenting all and just disabling some in the settings) and comparing the graphs and crossovers is a useful exercise. To that end, one last concept - the MARSI - a combined moving averages and RSI measurement - was abandoned because it didn't appear to indicate anything of use, however you may find crossovers or patterns with it comparing it to other graphs, so it was left in but commented.
Please take a look at the comments and all the math and indicators 'left on the cutting room floor' in the script. Maybe you'll find a gem in the redux version of this script.
Outreach regarding the script, patterns noticed and full-on stealing of the script are all permitted. Many elements of this script were nabbed from other scripts - thank you to a community of coders who put it all out there.
Gann Planetary Lines█ OVERVIEW
Gann Planetary Lines is one of the most powerful Gann Tools that converts planetary longitude angles into price. This script can be used in many different ways, methods, and trading systems.
This Script allows you to Plot Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, and Pluto. While also allowing you to select the planetary line mode "Heliocentric" or "Geocentric"
One more important feature about this script. It also allows you to plot in the harmonics of these planetary lines : "Wheel of 24" ,"Semi-Sextile", "Semi-Square", "Sextile", "Quintile", "Square", "Trine", and "Opposition "
And of course you will be able to select the color of each one of the planets when it comes to styling.
One more important thing to mention, Yes you will be able to select the $/° value so you can square these lines perfectly in your chart!
█ Future Plans and upgrades to this script may include :
1. Further lines into the futures.
2. An option to Enable and Disable the 0° vertical line when the planet transition from 360° to 0°
3. Labels around the planetary lines to distinguish between them not only by color by text as well.
And more! Feel free to contact me with any feature that you would like to see in this script
█ How to use :
First of all, select the appropriate $/° value.
Then select the planet you would like to use from the list in the script's option.
Select the mode of the planet, "Heliocentric" or "Geocentric"
Make sure to enable the planet by clicking on the check mark.
Then you will be able to see these planets on your chart.
Additionally, I have included an option to add the harmonics to your planetary lines!
Simply select the harmonics that you would like to have and give it 10 seconds and it should be in your chart.
This script is coded as an addon to the Gann ToolBox package/scripts.
MTP AnalysisThe MTP Reversal Bars, MTP Swing Pivots and MTP ATR Stop are all included in the MTP Analysis Script.
The MTP Reversal Bars give the entry triggers for the MTPredictor Trade Setups. Blue for a potential Buy, Red for a potential Sell, and Grey for neutral. Please note, these are only to be used in conjunction with our MT Trade and MTP Advanced Trade Setup Scripts, and are only relevant at (or up to 5 bars after) a potential trade setup. They are calculated using a unique combination of reversal triggers.
The MTP Swing Pivots connect the swing highs and lows on your chart, giving you the Pivots off which to work for your MTPredictor Analysis, for example when using our MTP Decision Point (DP) Script. The Swing Pivots use the number of Bars either side of the pivots for its construction (not a % retracement), and as such are not a simple Zig-zag indicator.
The MTP ATR Stop is used to trail your protective Stop, once in a position, when the Market is “strong” (MTP Trend indicator is beyond the strength band) when the market reaches its projected Profit target. Please see the MTP Trend indicator Script for more information on this.
There is a risk in Trading and Investing. Losses can and will unfold.
The script is available as an “invite-only” script, as part of the MTPredictor suite of tools on Trading View.
To obtain access, please go to the web page in our signature that appears below.
TradeChartist Donchian Channels Breakout Filter™TradeChartist Donchian Channels Breakout Filter is an elegant version of the classic Donchian Channels with few extra variations and option to filter breakouts based on user preferred Breakout price selection to generate Trade Entries.
===================================================================================================================
Features of ™TradeChartist Donchian Channels Breakout Filter
======================================================
Option to plot Donchian Channels of user preferred length, based on the Source price in addition to High/Low Donchian Channels.
Generates trade entries based on user preferred Breakout Price. For example, if the user prefers HL2 as breakout price, irrespective of the Donchian Channels type, trade entries are generated only when hl2 price (average of high/low) breaks out of the upper or lower band.
Option to plot background colour based on Breakout trend. The bull zones are filled with green background, the Bear zones are filled with red background and the bar that broke out is filled with orange background.
Option to colour price bars using Donchian Channels price trend. The Donchian Channels basis line is plotted using the same colours as coloured bars as default.
Alerts can be created for long and short entries using Once per Bar Close .
Note: This script does not repaint . To use the script for trade entries, wait for the bar close and use a second confirmator (includes fundamentals) based on asset type as some markets require users to have good pulse on the fundamentals as trading by Technicals/price action dynamic alone may not be safe.
===================================================================================================================
Best Practice: Test with different settings first using Paper Trades before trading with real money
===================================================================================================================
This is not a free to use indicator. Get in touch with me (PM me directly if you would like trial access to test the indicator)
Premium Scripts - Trial access and Information
Trial access offered on all Premium scripts.
PM me directly to request trial access to the scripts or for more information.
===================================================================================================================
TradeChartist Visualizer ™TradeChartist Visualizer is a fully packed Trader's toolkit that helps decide Trade Entries and Exits based on Bollinger Bands and Donchian Channels breakouts and can be further exploited by the use of various visualizers and built in Filters like Ichimoku Cloud, 15 different Moving Averages, RSI, TradeChartist's original MA Visualizer and Automatic Levels Generator.
===================================================================================================================
Bollinger Bands is a classic indicator that uses a simple moving average of 20 periods, along with plots of upper and lower bands that are 2 standard deviations away from the basis line. These bands help visualize price volatility and trend based on where the price is, in relation to the bands.
Donchian Channels comprises of three plots - a upper band, a lower band and a mean line (or mid line of the channel). The upper band is based on highest high of N periods specified by the user and the lower band is based on the lowest low of N periods specified by the user. These channels help spot price breaching high or low of last N periods clearly, thereby aiding the trader to understand the price action of any security better on any given timeframe.
===================================================================================================================
╔═════ 𝗕𝗕 & 𝗗𝗼𝗻𝗰𝗵𝗶𝗮𝗻 𝗖𝗵𝗮𝗻𝗻𝗲𝗹𝘀 ═════╗
™TradeChartist Visualizer is based on the idea of Bollinger Bands and Donchian Channels Breakout model for generating Trade Entries. Visualizer uses the following three fundamental plot options from the settings that the user can choose from, to spot breakouts, support/resistance levels and the trading price range of the security.
1. Bollinger Bands
The 𝟏. 𝐁𝐨𝐥𝐥𝐢𝐧𝐠𝐞𝐫 𝐁𝐚𝐧𝐝𝐬 option plots the Bollinger Bands for the chart timeframe (default is 55 SMA with 1 standard Deviation). This can be changed by entering different values in BB Sᴛᴀɴᴅᴀʀᴅ Dᴇᴠɪᴀᴛɪᴏɴ and MA Lᴇɴɢᴛʜ ғᴏʀ BB/Dᴏɴᴄʜɪᴀɴ Cʜᴀɴɴᴇʟs .
To use a different Moving Average for the Bollinger Bands Basis line, uncheck 𝐒𝐌𝐀 𝐁𝐁 𝐨𝐧𝐥𝐲 - 𝐔𝐧𝐜𝐡𝐞𝐜𝐤 𝐟𝐨𝐫 𝐧𝐨𝐧-𝐒𝐌𝐀 𝐁𝐁
The option is enabled as default as it keeps the SMA as standard. Unchecking this option and choosing a different moving average out of the 15 MAs in the dropdown, the plot changes significantly for each. Also a warning label will appear on screen if Standard Deviation more than 1 is used for non standard MA for Bollinger Bands, as the settings must be tested for non-standard Bollinger Bands before planning to trade with it.
2. True Donchian Channels
The 𝟐. 𝐓𝐫𝐮𝐞 𝐃𝐨𝐧𝐜𝐡𝐢𝐚𝐧 𝐂𝐡𝐚𝐧𝐧𝐞𝐥𝐬 option plots Donchian Channels by inspecting the lookback lengths for highest highs and lowest lows of the user specified periods, which can be changed in Uᴘᴘᴇʀ Dᴏɴᴄʜɪᴀɴ Cʜᴀɴɴᴇʟ Lᴇɴɢᴛʜ and Lᴏᴡᴇʀ Dᴏɴᴄʜɪᴀɴ Cʜᴀɴɴᴇʟ Lᴇɴɢᴛʜ user input boxes from Visualizer settings.
3. Donchian Channels - MA and Non-MA Source
The 𝟑. 𝐃𝐨𝐧𝐜𝐡𝐢𝐚𝐧 𝐂𝐡𝐚𝐧𝐧𝐞𝐥𝐬 - 𝐌𝐀/𝐍𝐨𝐧-𝐌𝐀 𝐒𝐨𝐮𝐫𝐜𝐞 option plots modified Donchian Channels based on highest high and lowest low of Moving Average or the Source using user specified periods, which can be changed in Uᴘᴘᴇʀ Dᴏɴᴄʜɪᴀɴ Cʜᴀɴɴᴇʟ Lᴇɴɢᴛʜ , Lᴏᴡᴇʀ Dᴏɴᴄʜɪᴀɴ Cʜᴀɴɴᴇʟ Lᴇɴɢᴛʜ , MA Lᴇɴɢᴛʜ ғᴏʀ BB/Dᴏɴᴄʜɪᴀɴ Cʜᴀɴɴᴇʟs choosing the source plot from Sᴏᴜʀᴄᴇ and MA Type from MA ᴛʏᴘᴇ - (ғᴏʀ ᴘʟᴏᴛs 1 & 3) . For Donchian Channels plot of Non-MA Source, choose Use Source from MA ᴛʏᴘᴇ - (ғᴏʀ ᴘʟᴏᴛs 1 & 3) dropdown.
===================================================================================================================
╔═════════ 𝗠𝗔 𝗩𝗶𝘀𝘂𝗮𝗹𝗶𝘇𝗲𝗿 ═════════╗
MA Visualizer is a powerful and very useful original visual method to plot Moving Averages of the close price of the security for user specified look back period in a visually appealing style in the form of colour coded bands. MA Visualizer not only helps the trader spot the price action of the security relative to the moving average, but also paints a visual picture of the trend strength, which must be seen and used on chart to appreciate its elegance.
Activate 𝗠𝗔 𝗩𝗶𝘀𝘂𝗮𝗹𝗶𝘇𝗲𝗿 and choose the MA type from MA Vɪsᴜᴀʟɪᴢᴇʀ Tʏᴘᴇ dropdown and entering the lookback period in MA Vɪsᴜᴀʟɪᴢᴇʀ ᴘᴇʀɪᴏᴅ input box. MA Visualizer colour theme can be be changed from MA Vɪsᴜᴀʟɪᴢᴇʀ Cᴏʟᴏʀ Sᴄʜᴇᴍᴇ dropdown.
The faster of the two set of bands that form the MA Visualizer reacts to price action faster and can be clearly seen from its change of colour from Bull Colour to Bear Colour or viceversa earlier than the slower set of bands. The fill colour between the bands also helps the user stay in a trade or exit a trade based on other confirmators or filters included in ™TradeChartist Visualizer .
===================================================================================================================
╔═══════ 𝗦𝗶𝗴𝗻𝗮𝗹𝘀 𝗮𝗻𝗱 𝗙𝗶𝗹𝘁𝗲𝗿𝘀 ═══════╗
𝗦𝗶𝗴𝗻𝗮𝗹𝘀
Trade Signals can be enabled along with use of various filters from this heading in Visualizer settings. To plot Trade entry markers on chart when a trade signal is generated, enable 𝐁𝐁/𝐃𝐨𝐧𝐜𝐡𝐢𝐚𝐧 𝐂𝐡𝐚𝐧𝐧𝐞𝐥𝐬 𝐁𝐫𝐞𝐚𝐤𝐨𝐮𝐭 𝐒𝐢𝐠𝐧𝐚𝐥𝐬.
The script automatically detects the breakouts based on user specified settings under 𝗕𝗕 & 𝗗𝗼𝗻𝗰𝗵𝗶𝗮𝗻 𝗖𝗵𝗮𝗻𝗻𝗲𝗹𝘀. Trade Entries are plotted on the real-time breakout candle, so it is recommended to wait for bar close before taking a position in the direction of the breakout.
𝗙𝗶𝗹𝘁𝗲𝗿𝘀
Various Filters can be used from this heading to reduce noise and help make the trade decision more effective and eliminates unproductive trades when the price is ranging or during sideways movement.
To use Filters, enable 𝐔𝐬𝐞 𝐓𝐫𝐚𝐝𝐞 𝐅𝐢𝐥𝐭𝐞𝐫 and choose the Filters from under Tʀᴀᴅᴇ Fɪʟᴛᴇʀ 1 and Tʀᴀᴅᴇ Fɪʟᴛᴇʀ 2 . If --- is chosen, no filter will be used. Trade filter parameters can be changed from under 𝗙𝗶𝗹𝘁𝗲𝗿 𝗣𝗮𝗿𝗮𝗺𝗲𝘁𝗲𝗿𝘀 section of Visualizer settings. The two trade filter dropdowns enable traders to use upto 2 filters from the following.
══> MA filter - This filters entries after a breakout only if the close price had breached the MA price. Filter MA is based on the same settings as MA Visualizer. This MA used for Filter can also be plotted by enabling 𝐃𝐢𝐬𝐩𝐥𝐚𝐲 𝐌𝐀 𝐅𝐢𝐥𝐭𝐞𝐫 (𝐌𝐀 𝐕𝐢𝐬𝐮𝐚𝐥𝐢𝐳𝐞𝐫 𝐒𝐞𝐭𝐭𝐢𝐧𝐠𝐬). To view this MA plot clearly, disable MA Visualizer.
══> MA Visualizer filter - This filters entries after a breakout only if both set of MA Visualizer bands had turned into same colour (either Bull or Bear Colour) agreeing with the direction of the breakout.
══> RSI filter - This filters entries after a breakout only if the RSI had crossed above RSI - Lᴏɴɢ Eɴᴛʀʏ Fɪʟᴛᴇʀ for Longs or if RSI had crossed below RSI - Sʜᴏʀᴛ Eɴᴛʀʏ Fɪʟᴛᴇʀ .
══> Kumo Breakout filter - This filters entries after a breakout only if price had closed above or below the Kumo of the Ichimoku Cloud in the direction of the breakout.
══> Price crossing Kijun Sen - This filters entries after a breakout only if close price had crossed Kijun Sen or the Ichimoku Base Line in the direction of the breakout.
To visualize the Kumo Breakout or Price crossing Kijun Sen, Ichimoku Cloud can be plotted on chart by enabling 𝐃𝐢𝐬𝐩𝐥𝐚𝐲 𝐈𝐜𝐡𝐢𝐦𝐨𝐤𝐮 𝐂𝐥𝐨𝐮𝐝 from 𝗙𝗶𝗹𝘁𝗲𝗿 𝗣𝗮𝗿𝗮𝗺𝗲𝘁𝗲𝗿𝘀 section of Visualizer settings.
===================================================================================================================
╔═══ 𝗔𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗰 𝗟𝗲𝘃𝗲𝗹𝘀 𝗚𝗲𝗻𝗲𝗿𝗮𝘁𝗼𝗿 ════╗
Enabling 𝗔𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗰 𝗟𝗲𝘃𝗲𝗹𝘀 𝗚𝗲𝗻𝗲𝗿𝗮𝘁𝗼𝗿 plots support and resistance levels automatically without any input from the user other than preferred levels plot from the indicator settings namely,
Plot Local Levels for Lower TF - Plots all important Support/Resistance levels for mostly smaller time frames (can be used for up to 1hr in most cases). Recommended for Scalping/Swing Trading mostly dependent on volatility.
Plot Local Levels for Higher TF - Plots all important Support/Resistance levels inferred from mostly time frames - Short to Mid term outlook.
Use Trading View Data Window to make effective use of the levels.
===================================================================================================================
╔═════════ 𝗨𝘀𝗲𝗳𝘂𝗹 𝗘𝘅𝘁𝗿𝗮𝘀 ═════════╗
Volatility exhaustion is detected by the script and plots $ on bar highs for Long Trades and bar lows for Short Trades if Tᴀᴋᴇ Pʀᴏғɪᴛ Bᴀʀs is enabled.
Candles/Bars can be colored with Price action trend strength by enabling Vɪsᴜᴀʟɪᴢᴇʀ Cᴏʟᴏʀ Bᴀʀs and by choosing one of two themes from Bᴀʀ Cᴏʟᴏʀ Sᴄʜᴇᴍᴇ . Bar colors can also be inverted using Iɴᴠᴇʀᴛ Bᴀʀ Cᴏʟᴏʀs option.
To paint the background of the chart to spot trade zones, enable Tʀᴀᴅᴇ Zᴏɴᴇs Bᴀᴄᴋɢʀᴏᴜɴᴅ Fɪʟʟ .
Alerts
Alerts can be created for Long and Short entries by using Once Per Bar Close as Alert Frequency. Entries are generated on Real time bars based on Breakout and filter conditions. It is recommended to wait for bar close before taking a position based on Visualizer Trade Entries.
The indicator does not repaint and can be confidently used for alerts and trade entries without worrying about signals disappearing.
™TradeChartist Visualizer can also be connected to ™TradeChartist Plug and Trade to generate entries along with Targets, Stop Loss plots etc. Target and Stop Loss alerts can be created using Plug and Trade's Alerts system.
===================================================================================================================
There are several combinations of settings that can be tested on the security traded based on timeframe and risk/reward expectations. The indicator can be used for trade entries with filter combinations or can be used as standalone Visualizer for trend confirmations, levels etc. Following are a few examples using the Visualizer.
Example Charts
1. ETH-USDT 1hr chart using Bollinger Bands (55/1, SMA) with 89 period Hull MA as MA Visualizer filter for BB Entries.
2. AAPL 1hr chart using 34 period Donchian Channels with 89 period Zero-Lag EMA as MA Visualizer filter for Entries.
3.EUR-USD 1hr chart using 34 period Donchian Channels with 89 period TEMA as MA Visualizer Filter for Entries.
4. XBT Daily chart using 9/21 Donchian Channels with Kumo Breakout Filter and 34 period Hull MA Visualizer Filter for Entries connected to Plug and Trade.
5. LINK-USDT 1hr chart using 34 period Donchian Channels with 55 period LSMA MA Visualizer Filter for Entries with Ichimoku Cloud Plot.
===================================================================================================================
Best Practice: Test with different settings first using Paper Trades before trading with real money
===================================================================================================================
This is not a free to use indicator. Get in touch with me (PM me directly if you would like trial access to test the indicator)
Premium Scripts - Trial access and Information
Trial access offered on all Premium scripts.
PM me directly to request trial access to the scripts or for more information.
===================================================================================================================
TradeChartist TrendRider ™TradeChartist TrendRider is an exceptionally beautiful and a functional indicator that does exactly what it says on the tin. The indicator rides the trend based on Momentum, Volatility, detecting critical zones of Support and Resistance along the way, which helps the indicator find the right trend to ride, plotting Trend Markers and Trade Signals based on only one piece of User input - TrendRider Type (Aggressive, Normal or Laid Back).
===================================================================================================================
What does ™TradeChartist TrendRider do?
™TradeChartist TrendRider dynamically calculates Support and Resistance levels when riding a trend and uses these levels for confirmation on breach or fail (on a candle close), before reversing from the current trend it is riding. The change of trend is signalled using Bᴜʟʟs or Bᴇᴀʀs labels which are plotted upon confirmation of the Trend.
TrendRider plots Bull and Bear Trend Markers on chart, which helps the user get a visual confirmation of the Trend.
TrendRider also plots $ signs to show Take Profit Bars and also paints Trend strength on price bars based on the Color Scheme, if these options are enabled from the indicator settings.
The above features can be clearly seen on the 1 hr chart of GBP-USD below.
===================================================================================================================
How to create Alerts for ™TradeChartist TrendRider Long and Short Entries?
Alerts can be created for Long or Short entries using Once Per Bar as Bᴜʟʟs or Bᴇᴀʀs labels appear only on confirmation after bar close.
===================================================================================================================
Does the indicator include Stop Loss and Take Profit plots?
This script doesn't have Stop Loss and Take Profit plots, but it can be connected to ™TradeChartist Plug and Trade as Oscillatory signal (" TrendRider Signal ") to generate Automatic Targets, set StopLoss and Take Profit plots and to create all types of alerts too. The 4hr chart of ICX-BTC below shows TrendRider connected to ™TradeChartist Plug and Trade.
===================================================================================================================
Does this indicator repaint?
No. This script doesn't repaint as it confirms its signals only after close above/below TrendRider's dynamic level and also uses security function to call higher time-frame values in the right way to avoid repainting. This can be verified using Bar Replay to check if the plots and fills stay in the same bar in real time as the Bar Replay.
===================================================================================================================
Example charts using TrendRider
Daily chart of BTC-USD
===================================================================================================================
15m chart of SPX
===================================================================================================================
1hr chart of ADA-USDT
===================================================================================================================
15m chart of XAU-USD
===================================================================================================================
4hr chart of Dow Jones Industrial Average
===================================================================================================================
Best Practice: Test with different settings first using Paper Trades before trading with real money
===================================================================================================================
This is not a free to use indicator. Get in touch with me (PM me directly if you would like trial access to test the indicator)
Premium Scripts - Trial access and Information
Trial access offered on all Premium scripts.
PM me directly to request trial access to the scripts or for more information.
===================================================================================================================
TradeChartist Chameleon™TradeChartist Chameleon is an exceptionally beautiful trend following indicator (visualised using Chameleon plot) based on Momentum and Volatility using User input of Chameleon Mode and Risk factor (ATR multiple) to generate Trade Opportunities.
===================================================================================================================
™TradeChartist Chameleon Features
Minimal user input of Chameleon Mode Selection from (Aggressive, Normal and Laid Back) and Chameleon Risk Factor (Min - 1, Max - 5 of ATR Multiple).
---> For Higher Timeframes, lower Risk Factor is recommended (Max - 3) as the trading range can be high based on Volatility.
---> For Lower Timeframes, higher Risk Factor can be used (Normal or Laid Back Mode) based on asset price volatility.
Comprehensive Chameleon Dashboard with useful information like Real-time Gains Tracker , User settings and general trade information. Dashboard can be customised based on user preference from Chameleon Settings.
Automatic Targets based on Trade.
Option to paint Price Bars to help identify Price Trend.
Option to display Profit Taking Bars (enabling this from settings will paint $ signs where Profit taking is recommended).
Option to color background based on trade type.
Alerts can be created for Long and Short Entry Signals using "Once per Bar" as Trade Entries are generated only upon confirmation (previous candle close below/above Chameleon Trigger line).
===================================================================================================================
How to create Alerts for ™TradeChartist Chameleon Long and Short Entries?
Alerts can be created for Long or Short entries using Once Per Bar as BUY and SELL labels appear with entries only on confirmation after bar close.
Does the indicator include Stop Loss and Take Profit plots?
This script doesn't have Stop Loss and Take Profit plots, but it can be connected to ™TradeChartist Plug and Trade as Oscillatory signal (" Chameleon ") to set StopLoss and Take Profit plots and to create all types of alerts too.
Does this indicator repaint?
No. This script doesn't repaint as it confirms its signals only after close above/below Chameleon Trigger line and also uses security function to call higher time-frame values in the right way to avoid repainting. This can be verified using Bar Replay to check if the plots and fills stay in the same bar in real time as the Bar Replay.
===================================================================================================================
Best Practice: Test with different settings first using Paper Trades before trading with real money
===================================================================================================================
This is not a free to use indicator. Get in touch with me (PM me directly if you would like trial access to test the indicator)
Premium Scripts - Trial access and Information
Trial access offered on all Premium scripts.
PM me directly to request trial access to the scripts or for more information.
===================================================================================================================
TradeChartist MTF Supertrend Pro™TradeChartist MTF SuperTrend Pro is the Multi Time-Frame version (using timeframe multiplier) of classic Volatility Stop or SuperTrend (Stop and Reverse indicator using multiple of Average True Range of lookback period trailing behind the price acting as both trend reversal signifier and StopLoss trigger at the same time ).
What does ™TradeChartist MTF SuperTrend Pro include?
Multi Time-Frame option using Time-Frame Multiplier to plot Higher Time Frame SuperTrend plot on Lower Time-Frame chart.
Auto-fibs - 2 types (1. Retracement from last significant high/low to previous significant low/high, 2. Retracement from Current High/Low to previous significant Low/High).
Trend identifying color bars.
Trend identifying Background colour.
Option to detect bars where Profit Taking is recommended using $ sign.
How to create Alerts for ™TradeChartist MTF SuperTrend Pro Long and Short Entries?
Alerts can be created for Long or Short entries using Once Per Bar as BUY and SELL labels appear with entries only on confirmation after bar close.
Does the indicator include Stop Loss and Take Profit plots?
This script doesn't have Stop Loss and Take Profit plots, but it can be connected to TradeChartist Plug and Trade as Non-Oscillatory signal to generate Automatic Targets, user set StopLoss and Take Profit plots and to create all types of alerts too.
Does this indicator repaint?
No. This script doesn't repaint as it confirms its signals only after close above/below SuperTrend plot and also uses security function to call higher time-frame values in the right way to avoid repainting. This can be verified using Bar Replay to check if the plots and fills stay in the same bar in real time as the Bar Replay.
===================================================================================================================
Tip 1: Using 1.618 as Timeframe Multiplier results in lucrative trades on most timeframes with ATR multiplier 1.618, 2.618 or 3.618. (Best Practice: Test with various values first on asset using Paper Trades before trading with real money)
Tip 2: Using bars, candles with no borders or Hollow Candles results in clear trend spotting with Bar color option enabled in settings.
===================================================================================================================
Chart below shows Performance of MTF SuperTrend Pro connected to Plug and Trade using Default settings.
===================================================================================================================
This is not a free to use indicator. Get in touch with me (PM me directly if you would like trial access to test the indicator)
Premium Scripts - Trial access and Information
Trial access offered on all Premium scripts.
PM me directly to request trial access to the scripts or for more information.
===================================================================================================================
TradeChartist PowerTracer™TradeChartist PowerTracer is an exceptionally well designed and functional indicator, requiring minimal user input to trace the asset's Bull and Bear Power. The indicator makes it visually engaging with its various color schemes and intelligent positioning of the PowerTracer Bar, tracking not just the current trend, but also the developing trend using a visually easy to understand Power plots.
What does ™TradeChartist PowerTracer do?
1. Tracks Bull and Bear Power and plots the information visually on chart using one of the following 3 Power plot options based on high or low power detection sensitivity.
𝗣𝗼𝘄𝗲𝗿𝗧𝗿𝗮𝗰𝗲𝗿 - Plot of the Bull and Bear Power Oscillator, pivotal to this script that tracks the true Bull and Bear Power along with Bull/Bear oscillator reading, calculated dynamically using a unique and original formula. Values beyond 50 and -50 are quite rare, but theoretically, they can go beyond 80 and -80. 𝗣𝗼𝘄𝗲𝗿𝗧𝗿𝗮𝗰𝗲𝗿's highs and lows are also tracked and updated real-time using labels placed exactly at the Highs and Lows with their readings.
Bar-wise Power Holder - Absolute Bull and Bear power of each bar. It is plotted by calculating the difference between Bull and Bear Power or each bar. The values can swing between -100 and +100 even though values above 90 and below 90 are rare. The bar color on the chart will be painted using this value to visually display the Bull/Bear strength if "Paint Bars on Chart" is enabled from the indicator settings.
Bar-wise Power Fight - Plot of Maximum Bull and Bear Power of every bar that helps visualize the fight between Bulls and Bears in each bar.
2. Visually displays the Balance of Power between the Bulls and the Bears using Opponent Power Gain background fill when it is 50% or over. For example, if the current PowerTracer plot is a Bull zone, enabling this setting with Opponent Power Gain % set at 75, will paint the background when Bear Power increases beyond 75% using the Bear Power Intensity fill based on Color Scheme the user opts from the settings. This option can be enabled or disabled from settings and the Opponent Power gain % (minimum 50%) can also be adjusted to spot the change in price trend early on.
3. Uses an accompanying 𝗣𝗼𝘄𝗲𝗿𝗧𝗿𝗮𝗰𝗲𝗿 bar that helps spot the true bull and bear power using simple linear blocks, displaying the power level using power intensity colors based on the color scheme.
4. Paints price bars and PowerTracer background using Power intensity colors based on Color Scheme from the indicator settings, which helps spot the increase or decrease in Bull and Bear Power.
5. Inverts bar colors, background fill and PowerTracer bar color to help see price using the Opponent's Point of View.
What markets can this indicator be used on?
-- Forex
-- Stocks - works best with 4hr or above and prices calculated taking gaps into account.
-- Commodities
-- Cryptocurrencies
and almost any asset on Trading View
What time-frames can this indicator be used on?
This indicator can be used on all timeframes. If the asset has very little volume/volatility or is far low in comparative value against the base currency, power detection can be choppy, but with most assets, this won't be an issue.
Does this indicator repaint?
-- No. Real-time Power plots can change colors and values based on current bar close as values get calculated dynamically. Once the bar closes, plots and power intensity colors don't repaint.
-- This can be verified using Bar Replay to check if the plots and fills stay in the same bar in real time as the Bar Replay
Does the indicator send alerts when the power shifts from Bull to Bear or from Bear to Bull?
Yes. Users can get alerts when Power gets shifted using Trading View alerts. This can be done by choosing '™TradeChartist PowerTracer' and 'Powershift to Bulls' or 'Powershift to Bears' under Trading View Alert condition and by using 'Once per bar close' as user needs to wait for candle close for Power shift confirmation.
Example Charts
In this split screen chart of Bitcoin, it can be seen how the 30m chart on left is Bearish and 5m chart on right is Bullish based on Power changes. The trend can be spotted on PowerTracer by spotting the Opponent's background fill that started showing when Opponent's power gained by over 75%. This is a good example using the script for scalping/swing trading using 2 timeframes. Note that the chart on the left shows Price bars and PowerTracer bar with inverted colors to show Opponent's point of view.
In this 15m chart of GBP-USD, 100% Power gain for Entries and Exits is used. This is a more conservative approach and is suited for less aggressive traders based on complete change of trend.
In this 2hr chart of Ethereum, all 3 Power plots are used to identify the trend using low sensitivity using 100% Power Gain entries and this shows how a trade can be held longer to maximise gains using entries with Power shift confirmations.
===================================================================================================================
This is not a free to use indicator. Get in touch with me (PM me directly if you would like trial access to test the indicator)
Premium Scripts - Trial access and Information
Trial access offered on all Premium scripts.
PM me directly to request trial access to the scripts or for more information.
===================================================================================================================
TFs Pivot Reversal StrategyThe Pivot Reversal strategy script uses pivot points to create a support and resistance level; based on this levels the strategy creates virtual stop-market orders to catch the trend if the price is crossing the pivot lines.
A configurable trailing-stop and stop-loss is being used to exit an open position.
How to use
The strategy works with all timeframes; the current chart setting is using a 15min timeframe. The strategy enters about 10 trades per day, depending on the used settings.
I'm also providing a "study" version of this strategy, which can be used to automate the strategy by using webhooks for instance.
The script is using a default commission of 0.075% which reflects Bitmex' Taker-Fees. This is just a default and can be modified in the strategy settings for each instrument individually.
How to access
This strategy is a "Invite Only" script. You can can subscribe or purchase the strategy ; please use the link below or send me a message via Tradingview to obtain access to the strategy and study script.
For enabling the script in your Tradingview chart window, click on "Indicators" and select "Invite-Only Scripts".
Full list of parameters:
"Pivot Left Bars" ... Number of bars on the left of the pivot point - used for pivot/peak detection
"Pivot Right Bars" ... Number of bars on the right of the pivot point - used for pivot/peak detection
"Entry Offset " ... Entry price offset after crossing pivot line (in %)
"Trailing Activation Level " ... Trailing stop activation level above/below average price (in %)
"Trailing Offset " ... Trailing stop price (in %)
"Stop Loss " ... Absolute stop-loss (in %)
"Capital Risk Factor " ... Capital risk factor (in %)
"Margin / Leverage " ... Optional leverage factor which can be used to leverage position (in %)
"Backtest ..." ... Backtest timeframe; area outside this timeframe will be grayed out
I'm looking forward to any feedback, reviews or change requests!
All-in-One Solutions - Long/Short StrategyHello,
I always had in mind that a single strategy cannot be profitable on multiple symbols or commodities ...
This is why I created this strategy where different settings can be applied for each of the symbol you use to trade.
For each symbol you trade, the strategy will ask you for 9 parameters to play with. I already filled the settings for several symbol but it is up to you to find the best 9 parameters for the symbol you like to trade and the time frame you usually use (I often use it in 1H).
The script does not allow any repaint and the Trading view back-testing system is reliable.
For exemple if you like to trade ETH/USD, you have to play with the 9 parameters and find the best net profitability calculated by the back-testing of Trading View.
Here is a screenshot of the setting page of the strategy :
imgur.com
You can find also below the link to all the previous scripts I published :
fr.tradingview.com
PS: please do not ask me to add in this strategy an alert system as Trading View does not allow to implement alerts in strategies script (because strategies scripts run on you computer, where alerts are located on TV servers).
Nevertheless if there is a demand, I can develop an indicator where you can implement the best settings found by you in this strategy and use it as an alerts script.
Please ask me for access, I grant free 1 week full access to all my indicators.
Have fun !
Last Update:
- I added the bar color in order to see on the chart the Long and Short positions
- I added the panels Open and Close positions to be visible on the chart
- I added an horizontal line on the chart when a position is open in order to see on the chart if position is positive or negative
- I modified the parameters description in order to make it more clear
I filled nice settings for 5 cryptos. If you find suitable settings for other commodities, please share the parameters into the comment in order to share with the community.
All-in-One Solutions - Long/Short StrategyHello,
I always had in mind that a single strategy cannot be profitable on multiple symbols or commodities...
This is why I created this strategy where different settings can be applied for each of the symbol you use to trade.
For each symbol you trade, the strategy will ask you for 9 parameters to play with. I already filled the settings for several symbol but it is up to you to find the best 9 parameters for the symbol you like to trade and the time frame you usually use (I often use it in 1H).
The script does not allow any repaint and the Trading view back-testing system is reliable.
For exemple if you like to trade ETH/USD, you have to play with the 9 parameters and find the best net profitability calculated by the back-testing of Trading View.
Here is a screenshot of the setting page of the strategy :
imgur.com
You can find also below the link to all the previous scripts I published :
fr.tradingview.com
PS: please do not ask me to add in this strategy an alert system as Trading View does not allow to implement alerts in strategies script (because strategies scripts run on you computer, where alerts are located on TV servers).
Nevertheless if there is a demand, I can develop an indicator where you can implement the best settings found by you in this strategy and use it as an alerts script.
Please ask me for access, I grant free 1 week full access to all my indicators.
Have fun !
CommonUtils█ OVERVIEW
This library is a utility tool for Pine Script™ developers. It provides a collection of helper functions designed to simplify common tasks such as mapping user-friendly string inputs to Pine Script™ constants and formatting timeframe strings for display. The primary goal is to make main scripts cleaner, more readable, and reduce repetitive boilerplate code. It is envisioned as an evolving resource, with potential for new utilities to be added over time based on community needs and feedback.
█ CONCEPTS
The library primarily focuses on two main concepts:
Input Mapping
Pine Script™ often requires specific constants for function parameters (e.g., `line.style_dashed` for line styles, `position.top_center` for table positions). However, presenting these technical constants directly to users in script inputs can be confusing. Input mapping involves:
Allowing users to select options from more descriptive, human-readable strings (e.g., "Dashed", "Top Center") in the script's settings.
Providing functions within this library (e.g., `mapLineStyle`, `mapTablePosition`) that take these user-friendly strings as input.
Internally, these functions use switch statements or similar logic to convert (map) the input string to the corresponding Pine Script™ constant required by built-in functions.
This approach enhances user experience and simplifies the main script's logic by centralizing the mapping process.
Timeframe Formatting
Raw timeframe strings obtained from variables like `timeframe.period` (e.g., "1", "60", "D", "W") or user inputs are not always ideal for direct display in labels or panels. The `formatTimeframe` function addresses this by:
Taking a raw timeframe string as input.
Parsing this string to identify its numerical part and unit (e.g., minutes, hours, days, weeks, months, seconds, milliseconds).
Converting it into a more standardized and readable format (e.g., "1min", "60min", "Daily", "Weekly", "1s", "10M").
Offering an optional `customSuffix` parameter (e.g., " FVG", " Period") to append to the formatted string, making labels more descriptive, especially in multi-timeframe contexts.
The function is designed to correctly interpret various common timeframe notations used in TradingView.
█ NOTES
Ease of Use: The library functions are designed with simple and understandable signatures. They typically take a string input and return the corresponding Pine Script™ constant or a formatted string.
Default Behaviors: Mapping functions (`mapLineStyle`, `mapTablePosition`, `mapTextSize`) generally return a sensible default value (e.g., `line.style_solid` for `mapLineStyle`) in case of a non-matching input. This helps prevent errors in the main script.
Extensibility of Formatting: The `formatTimeframe` function, with its `customSuffix` parameter, allows for flexible customization of timeframe labels to suit the specific descriptive needs of different indicators or contexts.
Performance Considerations: These utility functions primarily use basic string operations and switch statements. For typical use cases, their impact on overall script performance is negligible. However, if a function like `formatTimeframe` were to be called excessively in a loop with dynamic inputs (which is generally not its intended use), performance should be monitored.
No Dependencies: This library is self-contained and does not depend on any other external Pine Script™ libraries.
█ EXPORTED FUNCTIONS
mapLineStyle(styleString)
Maps a user-provided line style string to its corresponding Pine Script™ line style constant.
Parameters:
styleString (simple string) : The input string representing the desired line style (e.g., "Solid", "Dashed", "Dotted" - typically from constants like LS1, LS2, LS3).
Returns: The Pine Script™ constant for the line style (e.g., line.style_solid). Defaults to line.style_solid if no match.
mapTablePosition(positionString)
Maps a user-provided table position string to its corresponding Pine Script™ position constant.
Parameters:
positionString (simple string) : The input string representing the desired table position (e.g., "Top Right", "Top Center" - typically from constants like PP1, PP2).
Returns: The Pine Script™ constant for the table position (e.g., position.top_right). Defaults to position.top_right if no match.
mapTextSize(sizeString)
Maps a user-provided text size string to its corresponding Pine Script™ size constant.
Parameters:
sizeString (simple string) : The input string representing the desired text size (e.g., "Tiny", "Small" - typically from constants like PTS1, PTS2).
Returns: The Pine Script™ constant for the text size (e.g., size.tiny). Defaults to size.small if no match.
formatTimeframe(tfInput, customSuffix)
Formats a raw timeframe string into a more display-friendly string, optionally appending a custom suffix.
Parameters:
tfInput (simple string) : The raw timeframe string from user input or timeframe.period (e.g., "1", "60", "D", "W", "1S", "10M", "2H").
customSuffix (simple string) : An optional suffix to append to the formatted timeframe string (e.g., " FVG", " Period"). Defaults to an empty string.
Returns: The formatted timeframe string (e.g., "1min", "60min", "Daily", "Weekly", "1s", "10min", "2h") with the custom suffix appended.
ZenAlgo - MultiverseThe ZenAlgo – Multiverse indicator provides a multi-timeframe view of Volume-Weighted Average Price (VWAP) levels and their dynamic interaction with price across seven defined timeframes: Daily, Weekly, Monthly, Quarterly, Semi-Annual, and Yearly. The indicator is intended to help traders contextualize price within time-based value areas and examine how price interacts with statistically relevant bands derived from those VWAPs.
VWAP Calculation and Period Structure
At the core, this script computes VWAP levels anchored to six distinct timeframes using volume data and a configurable source (default is HLC3). Each VWAP resets at the start of its corresponding period (e.g., Daily VWAP resets at the beginning of a new day) using timeframe.change() as a detection mechanism. This allows each VWAP level to reflect a clean aggregation of price and volume over its specified period.
VWAP levels are only computed if volume data is present and cumulative volume increases, ensuring logical consistency. If volume is missing or inconsistent, the script terminates execution with an error to prevent invalid outputs.
Band Calculation
Each VWAP is accompanied by one or two optional bands on both sides, calculated using percentage-based offset. Daily VWAP is configurable per user preference to use either standard deviation or a percentage-based offset. These bands provide a dynamic value area that expands or contracts with volatility or proportional price distance, respectively.
The bands help classify price as:
Inside the main band (e.g., between ±1 band): near average value
Inside extended band (e.g., ±2 bands): stretched but not extreme
Beyond extended band: potentially overheated or oversold conditions
This layering creates a multi-zoned map of value perception across timeframes.
Labeling and Historical Tracking
As each new VWAP is computed, it is stored in a bounded array alongside metadata such as label position, line objects, test count, and test state (whether price has interacted with it). Each level is drawn as a dotted horizontal line and labeled with its value and corresponding period (e.g., "D", "W", "M").
Price interaction with a VWAP level (i.e., candle high/low crossing the line) changes the styling of the label and line, marking it as "tested." A cap on how many tested levels are retained (default 10) avoids excessive clutter and resource usage.
These persistent horizontal levels give the trader a visual reference of where value was defined in previous periods and how price has respected or ignored those levels over time.
Summary Tables and Grid
Two visual table overlays are provided:
1. VWAP Summary Table , this table shows:
VWAP values per timeframe
Trend interpretation (rising, falling, stable) relative to price
Ranked order of VWAP values (from highest to lowest)
The order is recalculated each bar to reflect the vertical positioning of each VWAP on the price chart.
2. VWAP Relationship Grid
A grid matrix compares each VWAP and current price against all others. Each cell reflects whether a given source is above, below, or within a tolerance threshold relative to another. Colors (green, red, gray) visually encode the result, with the diagonal marked in black and unused cells disabled.
This matrix helps identify alignment or dissonance among timeframes, allowing users to detect whether shorter-term value is leading or lagging longer-term value.
Price Band Classification
For the Daily VWAP specifically, the script includes an extra classification system. It assigns the current price to a zone (e.g., "At VWAP", "Bear Band", "Above Bull Band 2") based on where the price lies in relation to the VWAP bands. This classification is also used for dynamic coloring and added to the daily label.
Display Controls
The script offers fine-grained controls:
Toggle visibility of each VWAP and band group independently
Adjust the offset of labels from the current bar
Customize band multipliers and color transparency
Limit the number of historical VWAP labels plotted
Position both the summary and grid tables flexibly on screen
These options allow traders to declutter their charts and focus on the most relevant context for their strategy.
How to Interpret and Use
This indicator provides a structured view of market value perception across various timeframes. For example:
When price converges with multiple VWAPs, it may suggest consensus on value.
When price moves away from all VWAPs, it may indicate trending or stretched conditions.
Crosses and retests of VWAPs (especially higher-timeframe ones) can act as areas of interest.
The band-based classification helps identify transitional zones and whether price is situated in an area where value is being accepted or rejected.
The summary tables offer a high-level dashboard of price positioning and value structure, which can assist with top-down analysis, filtering setups, or contextual decision-making.
Added Value Compared to Free Alternatives
Most free VWAP scripts:
Cover only a single timeframe (often daily or session-based)
Lack historical level tracking with tested/retested visualization
Do not support grid-level relationships or multi-timeframe band analysis
Offer limited configuration over how bands are calculated or displayed
This script consolidates multiple value areas in one consistent framework and goes further by tracking historical relevance, providing interaction logs, and organizing data into actionable overlays.
For traders seeking comprehensive value context across intraday and swing horizons, this tool offers persistent and structured data views that are otherwise unavailable through individual, isolated VWAP tools.
Limitations and Disclaimers
The indicator depends on volume data. On instruments with unreliable or synthetic volume (e.g., certain spot forex or CFDs), results may not be meaningful.
Band-based interpretation should not be used as a signal mechanism on its own.
On low timeframes, longer-period VWAPs may appear flat or visually compressed.
As with any analytical tool, interpretation requires trader discretion and should be combined with broader context.